package pubsub

import (
	"context"

	"github.com/ThreeDotsLabs/watermill"
	"github.com/ThreeDotsLabs/watermill/message"
	"github.com/ThreeDotsLabs/watermill/pubsub/gochannel"
)

// MakeGoChannelPubSub 创建一个内存消息通道（GoChannel），返回发布器和订阅器
// logger: Watermill 日志适配器
// 返回 message.Publisher 和 message.Subscriber（均为 GoChannel 实例）
func MakeGoChannelPubSub(logger watermill.LoggerAdapter) (message.Publisher, message.Subscriber) {
	// 创建共享的 gochannel 实例，作为发布和订阅的通道
	ch := gochannel.NewGoChannel(gochannel.Config{
		// 设置缓冲区大小，适合本地演示
		OutputChannelBuffer: 1000,
	}, logger)
	publisher := ch  // ch 实现了 message.Publisher 接口
	subscriber := ch // ch 也实现了 message.Subscriber 接口
	return publisher, subscriber
}

// MakePublisherOnly 创建一个仅用于发布的 gochannel 实例
// logger: Watermill 日志适配器
// 返回 message.Publisher（GoChannel 实例）
func MakePublisherOnly(ctx context.Context, logger watermill.LoggerAdapter) message.Publisher {
	ch := gochannel.NewGoChannel(gochannel.Config{}, logger)
	return ch // ch 实现了 message.Publisher 接口
}
